import pandas as pd
import numpy as np

# DataFrame的切片
"""
注意：直接用中括号时：
-- 索引优先对列进行操作
-- 切片优先对行进行操作
"""
df = pd.DataFrame(
    np.random.randint(10, 100, size=(5, 6)),
    columns=['语文', '数学', '英语', '物理', '化学', '生物'],
    index=['张三', '李四', '王五', '赵六', '田七']
)
print(df)

# 行切片
print("\n行切片：")
print(df[1:3])  # 隐式：左闭右开
print(df.iloc[1:3])   # 和上面的隐式是一样
print(df["李四":"田七"])  # 显示：左闭右闭
print(df.loc["李四":"田七"])  # 和上面的显示是一样

# 列切片：对列切片，也必须先对航做切片
print("\n列切片：")
print(df.loc[:,'数学':'化学'])  # 显示：左闭右闭
print(df.iloc[:,3:5])   # 隐式：左闭开

# 练习
print("\n练习：")
# 取李四和王五的数英物
print(df.iloc[1:3,1:4])
print(df.loc["李四":"王五",'数学':'生物'])
# 张三和赵六的语文和化学
print(df.loc[['张三','赵六'],['语文','化学']])
print(df.iloc[[0,3], [0,4]])

"""
总结：
-- 要么去一行或者一列：索引
-- 要么去多行或者多列：切片
-- 要么去并不连续的多行或者多列：中括号
"""


















